package com.movie.ticket.sale.movieassembly.common;

import com.movie.ticket.sale.moviecommon.common.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author： Micsal
 * @create-time： 2020.12.03 11:32
 * @version： 1.0
 * @description： 权限管理服务 包含MessageUtil和OCRUtil
 */
@FeignClient(value = "movie-author", contextId = "authorAPI")
public interface MovieAuthor {

    //========================= 手机号验证 =================================================

    /**
     * 发送短信验证码(4位数字)
     */
    @GetMapping("/getTelCode")
    Result getTelCode(@RequestParam("tel") String tel);

    /**
     * 验证短信校验码
     */
    @PostMapping("/checkTelCode")
    Result checkTelCode(@RequestParam("tel") String tel, @RequestParam("code") String code);


    //======================= 登录时，随机数字验证 ===========================================================

    /**
     * 获取图片验证码
     */
    @GetMapping("/getRandomNum")
    Result getRandomNum();

    /**
     * 校验图片验证码
     */
    @PostMapping("/checkRandomNum")
    Result checkRandomNum(String code);

    //================================== 注册时，昵称和电话实时校验 =================================

    /**
     * 昵称实时校验
     */
    @PostMapping("/register/checkUserName")
    Result registerCheckUseName(String userName);

    /**
     * 手机号实时校验
     */
    @PostMapping("/register/checkTel")
    Result registerCheckTel(String tel);


    //===========================  用户注册 ============================================

    /**
     * 用户注册
     */
    @PostMapping("/user/register/checkMessage")
    Result userRegisterCheckMessage(@RequestParam("tel") String tel, @RequestParam("pass") String pass, @RequestParam("userName") String userName);

    //=============================== 登录 ==================================

    /**
     * 账号密码登录
     */
    @PostMapping("/login/namePass")
    Result loginNamePass(@RequestParam("name") String name, @RequestParam("pass") String pass);

    /**
     * 获取登录验证码
     */
    @GetMapping("/login/getTelCode")
    Result loginGetCode(String tel);

    /**
     * 校验登录验证码
     */
    @PostMapping("/login/checkTelCode")
    Result loginCheckCode(@RequestParam("tel") String tel, @RequestParam("code") String code);

    /**
     * 获取微信登录二维码
     */
    @GetMapping("/login/wx/getQRCode")
    Result loginWxGetQRCode();
//        try {
//            String codeUrl = weChatService.getQRCodeUrl();
//            logger.info("codeUrl:"+codeUrl);
//            return new Message(ResponseEnum.SUCCESS,codeUrl);
//        }catch (Exception e){
//            logger.error(e.toString()+e);
//            return new Message(ResponseEnum.FALL);
//        }

    /**
     * 微信登录
     */
    @PostMapping("/login/wx/callBack")
    Result loginWxCallBack(@RequestParam("code") String code, @RequestParam("state") String state);
//        if(StringUtils.isBlank(code)){
//            return new Message(ResponseEnum.ESSENTIAL_IS_NULL);
//        }
//        if(StringUtils.isBlank(state)){
//            return new Message(ResponseEnum.ESSENTIAL_IS_NULL);
//        }
//        logger.info("微信回调------------");
//        logger.info(code+"------"+state);
//        try {
//            Message message=weChatService.wxCallBack(request,code, state);
//            return message;
//        }catch (Exception e){
//            logger.error(e.toString()+"\n"+e);
//            return new Message(ResponseEnum.FALL);
//        }

    /**
     * 登出
     */
    @DeleteMapping("/logout")
    Result logout();


    //======================== 影院申请入驻 =======================================================

    /**
     * 影院申请，获取验证码
     */
    @GetMapping("/cinema/apply/getTelCdde")
    Result cinemaApplyGetCode(String tel);

    /**
     * 校验短信验证码
     */
    @PostMapping("/cinema/apply/checkTelCode")
    Result cinemaApplyCheckCode(@RequestParam("tel") String tel, @RequestParam("code") String code);


    /**
     * 影院注册
     */
    @PostMapping("/author/cinema/apply/checkNameAndPass")
    Result cinemaApplyCheckNameAndPass(@RequestParam("tel") String tel, @RequestParam("pass") String pass, @RequestParam("name") String name);

    /**
     * 影院入驻，上传营业信息
     *
     * @param files       法人身份证(2张)，营业执照(2张):0身份正面，1身份反面，2执照正面，3执照反面
     * @param account     影院的银行账户
     * @param cinemaName  影院名称
     * @param name        法人姓名
     * @param identity    法人身份证号
     * @param degree      影院等级
     * @param registerNum 营业执照的注册号或统一社会信用代码
     */
    @PostMapping("/author/cinema/apply/updateLegalFile")
    Result cinemaApplyUpdateLegalFile(@RequestParam("files") MultipartFile[] files, @RequestParam("account") String account, @RequestParam("cinemaName") String cinemaName, @RequestParam("name") String name, @RequestParam("identity") String identity, @RequestParam("degree") int degree, @RequestParam("registerNum") String registerNum);


    /**
     * 影院入驻，上传影院信息
     *
     * @param files     影院图片 1:封面 其余：详情图
     * @param addr      地址
     * @param longitude 经度
     * @param latitude  维度
     * @param service   服务
     */
    @PostMapping("/author/cinema/apply/updateCinemaFile")
    Result cinemaApplyUpdateCinemaFile(@RequestParam("files") MultipartFile[] files, @RequestParam("addr") String addr, @RequestParam("longitude") double longitude, @RequestParam("latitude") double latitude, @RequestParam("service") String service);


    /**
     * 拉取默认合同
     * 合同编号 ,合同版本-默认V1.0 ,甲方 ,乙方 ,年费 ,平台手续费 ,时间 ,审核状态：“待审核”，“驳回”，“同意”
     */
    @GetMapping("/author/cinema/apply/getDefaultContract")
    Result cinemaApplyGetDefaultContract();


    /**
     * 提交修改合同
     *
     * @param contractNum 合同编号
     * @param annualCost  年费
     * @param tipRoot     手续费
     * @param changes     是否改变：年费是否申请改变，第二位：手续费是否申请改变 0or1
     */
    @PostMapping("/author/cinema/apply/changeContract")
    Result cinemaApplyChangeContract(@RequestParam("contractNum") String contractNum, @RequestParam("annualCost") double annualCost, @RequestParam("tipRoot") double tipRoot, @RequestParam("changes") boolean[] changes);

    /**
     * 确认签约，存签约图片
     *
     * @param signImg 签名图片
     */
    @PostMapping("/author/cinema/apply/configContract")
    Result cinemaApplyConfigContract(MultipartFile signImg);

    /**
     * 人工上传合同
     *
     * @param contract 合同
     * @param name     法人姓名
     * @param tel      法人电话
     */
    @PostMapping("/author/cinema/apply/updateContract")
    Result cinemaApplyUpdateContract(@RequestParam("contract") MultipartFile contract, @RequestParam("name") String name, @RequestParam("tel") String tel);

    /**
     * 申请入驻成功
     */
    @PostMapping("/author/cinema/apply/sendMessage")
    Result cinemaApplySendMessage(String tel);

    /**
     * 图片识别(身份证)
     */
    @PostMapping("/author/ocr/recognizeImg")
    Result recognizeImg(MultipartFile file);

    /**
     * 上传1张图片
     */
    @PostMapping("/author/file/updateOneFile")
    Result updateOneFileFunction(@RequestParam("father") String father, @RequestParam("file") MultipartFile file, @RequestParam("id") int id);

    /**
     * 上传多张图片
     */
    @PostMapping("/author/file/updateFiles")
    Result updateFilesFunction(@RequestParam("father") String father, @RequestParam("files") MultipartFile[] files, @RequestParam("id") int id);

    /**
     * 下载文件
     *
     * @param url 类似于："http://81.69.245.134/sundry/default-contract.jpg";
     */
    @GetMapping("/author/file/downOneFile")
    Result downloadFileFunction(String url);
}
